package com.ruoyi.system.service.impl;

import java.util.List;
import java.util.Arrays;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SerialNumberUtils;
import com.ruoyi.system.domain.FeedbackItem;
import com.ruoyi.system.mapper.FeedbackItemMapper;
import com.ruoyi.system.service.IFeedbackItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 问题反馈Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-01-12
 */
@Service
public class FeedbackItemServiceImpl implements IFeedbackItemService 
{
    @Autowired
    private FeedbackItemMapper feedbackItemMapper;

    /**
     * 查询问题反馈
     * 
     * @param id 问题反馈主键
     * @return 问题反馈
     */
    @Override
    public FeedbackItem selectFeedbackItemById(Long id)
    {
        FeedbackItem feedbackItem = feedbackItemMapper.selectFeedbackItemById(id);
        // 处理图片列表 - 从数据库的imagesUrls字段同步到images字段
        if (feedbackItem != null && StringUtils.isNotEmpty(feedbackItem.getImagesUrls())) {
            feedbackItem.setImages(Arrays.asList(feedbackItem.getImagesUrls().split(",")));
        }
        if (feedbackItem != null && StringUtils.isNotEmpty(feedbackItem.getHandleImagesUrls())) {
            feedbackItem.setHandleImages(Arrays.asList(feedbackItem.getHandleImagesUrls().split(",")));
        }
        return feedbackItem;
    }

    /**
     * 查询问题反馈列表
     * 
     * @param feedbackItem 问题反馈
     * @return 问题反馈
     */
    @Override
    public List<FeedbackItem> selectFeedbackItemList(FeedbackItem feedbackItem)
    {
        List<FeedbackItem> list = feedbackItemMapper.selectFeedbackItemList(feedbackItem);
        // 处理图片列表 - 从数据库的imagesUrls/handleImagesUrls 同步到前端列表字段
        for (FeedbackItem item : list) {
            if (StringUtils.isNotEmpty(item.getImagesUrls())) {
                item.setImages(Arrays.asList(item.getImagesUrls().split(",")));
            }
            if (StringUtils.isNotEmpty(item.getHandleImagesUrls())) {
                item.setHandleImages(Arrays.asList(item.getHandleImagesUrls().split(",")));
            }
        }
        return list;
    }

    /**
     * 新增问题反馈
     * 
     * @param feedbackItem 问题反馈
     * @return 结果
     */
    @Override
    public int insertFeedbackItem(FeedbackItem feedbackItem)
    {
        // 自动生成序号
        if (StringUtils.isEmpty(feedbackItem.getSerial())) {
            feedbackItem.setSerial(SerialNumberUtils.generateFeedbackSerial());
        }
        
        // 设置默认状态
        if (StringUtils.isEmpty(feedbackItem.getStatus())) {
            feedbackItem.setStatus("pending");
        }
        
        // 设置提交时间
        if (feedbackItem.getSubmitTime() == null) {
            feedbackItem.setSubmitTime(DateUtils.getNowDate());
        }
        
        // 处理图片列表 - 前端可能传递字符串格式的images，需要转换为imagesUrls存储
        if (feedbackItem.getImages() != null && !feedbackItem.getImages().isEmpty()) {
            feedbackItem.setImagesUrls(String.join(",", feedbackItem.getImages()));
        }
        if (feedbackItem.getHandleImages() != null && !feedbackItem.getHandleImages().isEmpty()) {
            feedbackItem.setHandleImagesUrls(String.join(",", feedbackItem.getHandleImages()));
        }
        
        // 设置phone字段默认值（避免数据库字段无默认值错误）
        if (StringUtils.isEmpty(feedbackItem.getPhone())) {
            feedbackItem.setPhone("");
        }
        
        // 设置创建者信息
        feedbackItem.setCreateTime(DateUtils.getNowDate());
        if (StringUtils.isEmpty(feedbackItem.getCreateBy())) {
            feedbackItem.setCreateBy("system");
        }
        return feedbackItemMapper.insertFeedbackItem(feedbackItem);
    }

    /**
     * 修改问题反馈
     * 
     * @param feedbackItem 问题反馈
     * @return 结果
     */
    @Override
    public int updateFeedbackItem(FeedbackItem feedbackItem)
    {
        // 处理图片列表 - 将images/handleImages 字段转换为 *_urls 字段存储到数据库
        if (feedbackItem.getImages() != null && !feedbackItem.getImages().isEmpty()) {
            feedbackItem.setImagesUrls(String.join(",", feedbackItem.getImages()));
        }
        if (feedbackItem.getHandleImages() != null && !feedbackItem.getHandleImages().isEmpty()) {
            feedbackItem.setHandleImagesUrls(String.join(",", feedbackItem.getHandleImages()));
        }
        
        // 如果是处理反馈，设置处理时间
        if (StringUtils.isNotEmpty(feedbackItem.getFeedback()) && feedbackItem.getHandleTime() == null) {
            feedbackItem.setHandleTime(DateUtils.getNowDate());
        }
        
        feedbackItem.setUpdateTime(DateUtils.getNowDate());
        return feedbackItemMapper.updateFeedbackItem(feedbackItem);
    }

    /**
     * 批量删除问题反馈
     * 
     * @param ids 需要删除的问题反馈主键
     * @return 结果
     */
    @Override
    public int deleteFeedbackItemByIds(Long[] ids)
    {
        return feedbackItemMapper.deleteFeedbackItemByIds(ids);
    }

    /**
     * 删除问题反馈信息
     * 
     * @param id 问题反馈主键
     * @return 结果
     */
    @Override
    public int deleteFeedbackItemById(Long id)
    {
        return feedbackItemMapper.deleteFeedbackItemById(id);
    }
}
